#!/usr/bin/env python3 

#---------------------------------------------
#读取文件数据并打印经过FFT后的幅度
#文件数据每行一个采样的数据
# ./fft.py filepath Fs
#----------------- 示例文件 ------------------
#1
#2
#3
#4
#---------------------------------------------
import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
import seaborn
import os ,sys 

Fs=1 #信号的采样率
filepath=''
y = [] 
x = [] 

if len(sys.argv) == 1 :
    filepath="m.dat"
elif len(sys.argv) == 2 :
    filepath=str(sys.argv[1])
elif len(sys.argv) == 3:
    filepath=str(sys.argv[1])
    try:
        Fs=float(sys.argv[2])
    except Exception as e:
        print("输入采样率错误！")
        quit()
else :
    print("error!")
if os.path.isfile(filepath)==False:
    print('数据文件'+str(filepath)+'不存在')
    print("使用命令 \'fft filePath Fs\' 对数据文件filePath进行FFT")
    quit()

data=open(filepath) 
idx = 0
cnt = 0
while True:
    mstr=data.readline()  #读取文件数据
    mstr=mstr.replace('\n','') #删除回车换行
    mstr=mstr.replace('\r','')
    mstr=mstr.replace(' ','') #删除空格
    if len(mstr) ==0:
        cnt =cnt+1
        if cnt > 10 :
            break 
        continue 
    # 更新绘图数据
    y.append(float(mstr))
    x.append(float(idx)) 
    idx +=1
    cnt=0
data.close()

yy=fft(y)                     #快速傅里叶变换
yreal = yy.real               # 获取实数部分
yimag = yy.imag               # 获取虚数部分

if Fs==1 :
    Fs = len(yy)

yf=abs(fft(y))                # 取模
yf1=abs(fft(y))/((len(x)/2))           #归一化处理
yf2 = yf1[range(int(len(x)/2))]  #由于对称性，只取一半区间

xf = np.arange(len(y)) *Fs / len(y)      # 频率
xf1 = xf
xf2 = xf[range(int(len(x)/2))]#取一半区间

#输出
for i in range(len(yf2)):
    print(str(xf2[i])+' '+str(yf2[i]))

#quit()
#-----------------------------------------------------
